/// 函数中的生命周期
// fn longest(x: &str, y:&str) -> &str {
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn get_str<'a>(x: &'a str, y: &str) -> &'a str {
    x
}
/// r 是在函数内部创建的本地变量，一旦函数 a_str 返回，r 就会被销毁。
/// 这意味着 r.as_str() 返回的引用会指向一个无效的内存区域，因为 r 已经不再存在了。这就是悬垂引用问题。
fn a_str<'a>(x: &'a str, y: &'a str) -> &'a str {
    let r = String::from("test");
    r.as_str()
}
fn main() {
    let s1 = String::from("abcde");
    let s2 = String::from("ab");
    let r = longest(s1.as_str(), s2.as_str());
    println!("r = {}", r);
    let s3 = String::from("ab");
    let s4 = String::from("cd");
    let r1 = get_str(s4.as_str(), s3.as_str());
    println!("r1 = {}", r1);

    let ss1 = String::from("ab");
    let ss2 = String::from("cd");
    let rr1 = get_str(ss1.as_str(), ss2.as_str());
    println!("rr1 = {}", rr1);

    println!("Hello, world!");
}
